package com.example.pattern.prototype;

/**
 * 指原型实例指定创建对象的种类，并且通过拷贝这些原型创建新的对象
 * 原型 模式
 */
public class ProductWithCloneTest {

    public static void main(String[] args) throws CloneNotSupportedException {

        ProductWithClone product = new ProductWithClone("acai", 25, "earth");
        //克隆一个对象出来
        ProductWithClone product1 = product.clone();

        System.out.println(product);
        System.out.println(product1);

    }

}

/**
 * 实现了 Cloneable 接口，就可以使用 Object 的 clone() 方法 克隆对象
 */
class ProductWithClone implements Cloneable{

    private String name;
    private int age;
    private String address;

    public ProductWithClone(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * jvm 实现了 对象 属性的复制
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    protected ProductWithClone clone() throws CloneNotSupportedException {
        ProductWithClone product = (ProductWithClone) super.clone();
        product.setName("acai copy");
        return product;
    }

}
